/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

/* 
 * File:   Serialize.h
 * Author: ever
 *
 * Created on 2018年5月5日, 上午5:36
 */

#ifndef SERIALIZE_H
#define SERIALIZE_H
#include <ctype.h>
#include <unistd.h>
#include <vector>

namespace PR {
    namespace Wiz {
        typedef unsigned char u8;
        typedef unsigned short u16;
        typedef unsigned int u32;
        typedef int s32;

        class Serialize {
        public:
            Serialize();
            Serialize(const Serialize& orig);
            virtual ~Serialize();
            
            /**
             * 设置外部buffer数据，该类不对buffer的生命周期进行管理
             * 本接口不对buffer内容做任何修改
             * @param data 外部buffer地址
             * @param len buffer长度
             */
            void assign(u8 * data,size_t len);
            
            
            
            u8 * data(){
                return _data;
            }
            
            /**
             * 序列化整型数据 最高位为1表示后续还有数据
             * @param v 输入数据
             * @return true 成功，false 失败，内存不够
             * @throw nothrow
             */
            bool ser(u32 v);
            
            /**
             * 反序列化整型数据
             * @param v
             * @return 
             */
            bool der(u32 & v);
        private:
            u8 * _data;
            u8 * _cur;
            u32 _size;
//            std::vector<u8> _buffer;
        };

        class Int {
        public:
            Int(int v);
        };

        class Float {
        public:
            Float(float v);
        };
    }
}
#endif /* SERIALIZE_H */

